#ifndef POUVOIR_H_
#define POUVOIR_H_

/* Typedef */
typedef struct _Pouvoir Pouvoir;
typedef enum _TypePouvoir { tpMassue, tpFleche, tpGeant, tpInvocation, tpDeconcentration,tpUndefined } TypePouvoir;

/* Includes */
#include "Jeu.h"
#include "Personnage.h"

/* destructeur */
void deletePouvoir(Pouvoir* p);
/**
 * \fn char* pouvoirGetNom(Pouvoir* pouvoir)
 * 
 * \brief récupère le nom du pouvoir
 *
 * \param le pouvoir dont on veut connaêtre le nom
 * 
 * \return le nom du pouvoir
 */
char* pouvoirGetNom(Pouvoir* pouvoir);

/**
 * \fn int pouvoirGetQuantite(Pouvoir* pouvoir)
 * 
 * \brief récupère la quantité du pouvoir
 * 
 * \param le pouvoir dont on veut connaêtre la quantité
 * 
 * \return la quantité du pouvoir 
 */
int pouvoirGetQuantite(Pouvoir* pouvoir);

/**
 * \fn Personnage* pouvoirGetPersonnage(Pouvoir* pouvoir)
 * 
 * \brief recupere le personnage du pouvoir
 * 
 * \param le pouvoir du personnage
 * 
 * \return le personnage du pouvoir
 */
Personnage* pouvoirGetPersonnage(Pouvoir* pouvoir);

/**
 * \fn TypePouvoir pouvoirGetType(Pouvoir* pouvoir)
 * 
 * \brief recupere le type de pouvoir
 * 
 * \param le pouvoir du personnage
 * 
 * \return type du pouvoir
 */
TypePouvoir pouvoirGetType(Pouvoir* pouvoir);

/**
 * \fn void pouvoirSetNom(Pouvoir* pouvoir,char* nom)
 * 
 * \brief donne un nom au pouvoir
 * 
 * \param le pouvoir que l'on nomme, le nom du pouvoir
 */
void pouvoirSetNom(Pouvoir* pouvoir,char* nom);

/**
 * \fn void pouvoirSetQuantite(Pouvoir* pouvoir,int quantite)
 * 
 * \brief donne une quantité au pouvoir
 * 
 * \param le pouvoir dont on donne la quantité, la quantité du pouvoir
 */
void pouvoirSetQuantite(Pouvoir* pouvoir,int quantite);

/**
 * \fn void pouvoirSetPersonnage(Pouvoir* pouvoir,Personnage* perso)
 * 
 * \brief permet de modifier le personnage à qui ce pouvoir appartient
 * 
 * \param pouvoir Pouvoir
 * \param perso Nouveau personnage
 */
void pouvoirSetPersonnage(Pouvoir* pouvoir,Personnage* perso);

/**
 * \fn int pouvoirAppliquer(Jeu* jeu)
 * 
 * \brief Appliquer un pouvoir sur le jeu
 * 
 * \param pouvoir Pouvoir à appliquer au jeu
 * \param jeu Jeu sur lequel va être appliqué le pouvoir
 * 
 * \return 1 si réussir
 * 		   0 sinon
 */
int pouvoirAppliquer(Pouvoir* pouvoir, Jeu* jeu);

int pouvoirCanUseItNow(Pouvoir* pouvoir, Jeu* jeu);

#endif /*POUVOIR_H_*/
